#include <av_widget/qls_volume_tool_tip_widget.h>
#include "./ui_qls_volume_tool_tip_widget.h"

QLsVolumeToolTipWidget::QLsVolumeToolTipWidget(QWidget *parent)
    : QDialog(parent), ui(new Ui::QLsVolumeToolTipWidget)
{
    ui->setupUi(this);

    setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); /* 设置无边框属性 */
    installEventFilter(this);           /* 注册事件过滤器 */
    setAttribute(Qt::WA_DeleteOnClose); /* 关闭后自动销毁自身对象 */

    ui->volumeVSlider->setRange(0, 100);
    ui->volumeVSlider->installEventFilter(this);
}

QLsVolumeToolTipWidget::~QLsVolumeToolTipWidget()
{
    delete ui;
}

int QLsVolumeToolTipWidget::value() const
{
    return ui->volumeVSlider->value();
}

void QLsVolumeToolTipWidget::setValue(const int &value)
{
    ui->volumeLabel->setText(QString::number(value));
    ui->volumeVSlider->setValue(value);
}

void QLsVolumeToolTipWidget::popup(QPoint pos, const int &value)
{
    QLsVolumeToolTipWidget *t = new QLsVolumeToolTipWidget();
    t->setValue(value);
    t->show();
    t->move(pos);
}

/* 事件过滤器 */
bool QLsVolumeToolTipWidget::eventFilter(QObject *watched, QEvent *event)
{
    /* 鼠标点击其他地方的时候自动关闭 */
    if (watched == this) {
        if (event->type() == QEvent::WindowDeactivate) {
            close();
            event->accept();
            return true;
        }
    }

    /* 音量条 */
    if (watched == ui->volumeVSlider) {
        if (event->type() == QEvent::MouseButtonPress) {
            double pos = (QCursor::pos().y() -
                          ui->volumeVSlider->mapToGlobal(QPoint(0, 0)).y()) /
                         (double)ui->volumeVSlider->height();
            ui->volumeVSlider->setValue(
                (1 - pos) *
                (ui->volumeVSlider->maximum() - ui->volumeVSlider->minimum()));
        }
    }

    return QWidget::eventFilter(watched, event);
}

/* 音量修改 */
void QLsVolumeToolTipWidget::on_volumeVSlider_valueChanged(int value)
{
    /* 同步显示Label */
    ui->volumeLabel->setText(QString::number(value));

    /* 发送音量变化信号 */
    float volume = value / 100.0;
    emit sigVolumeChange(volume);
}
